[小ネタ][Visual Studio Code]Dockerイメージの開発環境に作業用ユーザで接続する & Go言語でリモートデバッグをしてみる
以前、以下の記事にてDockerイメージの開発環境にVisual Studio Codeで接続することについて書きました。 Amazon Linux 2 の Dockerイメージから開発環境を作り Visual Studio Codeで接続してみる
こちらの記事では作業用のユーザとして「ec2-user」を作成していますが、Visual Studio Codeから接続した時には「root」ユーザとして接続していました。また接続後にVisual Studio Codeのターミナルで「$ su - ec2-user」を実行して作業用ユーザに切り替えていましたが、(前回は触れませんでしたが)この状態でリモートデバッグをしてもデバッグプロセスのユーザは「root」のままでした。
この辺りが実際の開発だと不便だったため、少しだけ修正して作業用ユーザで最初から接続する & リモートデバッグできるようしてみました。
修正した所
まず修正した所ですが、「Dockerfile」の最後の方に「ec2-user」を使用するための文を追加しました(27行目)。修正箇所はこれだけとなります。以下に「Dockerfile」を載せておきます。
FROM amazonlinux:2 # install amazon-linux-extras install RUN amazon-linux-extras install -y # yum update & install RUN yum update -y \ && yum install \ systemd \ tar \ unzip \ sudo \ -y # install aws cli v2 RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \ && unzip awscliv2.zip \ && sudo ./aws/install # create user RUN useradd "ec2-user" && echo "ec2-user ALL=NOPASSWD: ALL" >> /etc/sudoers # install for develop, etc. RUN sudo amazon-linux-extras install golang1.11 -y # change user USER ec2-user # init CMD ["/sbin/init"]
動かしてみる
修正箇所はこれだけなのですが、実際に動かしてみたいと思います。前回同様、以下のコマンドでコンテナを起動します。
$ docker-compose up -d
コンテナを起動し、Visual Studio Codeの「Remote-Containers: Attach to Runnning Container...」よりコンテナに接続してターミナルを開きます。ターミナルを開いた直後にユーザを確認してみます。
$ echo $USER ec2-user
ターミナル上ではユーザが作業用ユーザである「ec2-user」となっていることが分かるかと思います。
次にリモートデバッグをしてみます。前回は触れなかったのですが、Visual Studio Codeにはリモートでデバッグできる機能があります。今回は特に難しい設定をすることなく、右下に表示される以下のようなダイアログの「Install All」を押して、必要なコンポーネントが全てインストールされるのを待つだけで実行できました。(少し時間が掛かりました)
デバッグするコードは、以前と同じく「/share/src/sample.go」としてみました。
[ec2-user@xxxxxxxxxxxx ~]$ go version go version go1.15.14 linux/amd64 [ec2-user@xxxxxxxxxxxx ~]$ mkdir /share/src [ec2-user@xxxxxxxxxxxx ~]$ touch /share/src/sample.go
「sample.go」は今回はデバッグで実行しているユーザが分かるように以下のようにしてみました。
package main import ( "fmt" "os/user" ) func main() { fmt.Println("ok") user, err := user.Current() if err != nil { panic(err) } fmt.Printf("current user = %s\n", user.Username) }
「Install All」にて全てのインストールが終わったら、「F5」キーなどでデバッガを起動し、以下のようにブレークポイントで止めてみると実行しているユーザが「ec2-user」であることが確認できました。
まとめ
たった一行を「Dockerfile」に追加しただけですが、作業効率がかなり上がったので記事として投稿いたしました。何かの役に立てば幸いです。